using System;
using System.Collections.Generic;
using System.Text;

using RRHH.Competencias.Entities.AdminPermisos;

namespace RRHH.Competencias.DataAccessLayer.Generic
{
    /// <summary>
    /// Estructura generica que define los metodos de persistencia asociados
    /// a la clase Permiso
    /// </summary>
    public interface IDALPermiso : IDALABM<Permiso>
    {
        /// <summary>
        /// Obtiene un listado de permisos para un usuario en particular
        /// </summary>
        /// <param name="usuario">Usuario del cual se desean obtener los permisos</param>
        /// <returns>Listado de permisos para el usuario</returns>
        /// <exception cref="DALException">Error en acceso a datos</exception>
        List<Permiso> CompletarSegunUsuario(Usuario usuario);

        /// <summary>
        /// Obtiene un listado de permisos segun los parametros indicados
        /// </summary>
        /// <param name="usuario">Datos del usuario</param>
        /// <param name="funcion">Datos de la funcion</param>        
        /// <returns>Listado de permisos</returns>
        List<Permiso> Buscar(Usuario usuario, Funcion funcion, bool soloActivos );

        /// <summary>
        /// Elimina los permisos existentes para un usuario en particular
        /// </summary>
        /// <param name="usuario">Usuario del que se eliminaran los permisos</param>
        /// <param name="usuarioBaja">Usuario que dio de baja los permisos</param>
        /// <exception cref="DALException">Error en acceso a datos</exception>
        void Eliminar(Usuario usuario, Usuario usuarioBaja);

        /// <summary>
        /// Elimina los permisos existentes para una funcion en particular
        /// </summary>
        /// <param name="funcion">Funcion de la que se eliminaran los permisos</param>
        /// <param name="usuarioBaja">Usuario que dio de baja los permisos</param>
        /// <exception cref="DALException">Error en acceso a datos</exception>
        void Eliminar(Funcion funcion, Usuario usuarioBaja);
    }
}
